package ar.com.cicweb.controllers;

import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import ar.com.cicweb.dao.CategoriaDAO;
import ar.com.cicweb.dao.CategoriaSubCategoriaDAO;
import ar.com.cicweb.dao.MarcaDAO;
import ar.com.cicweb.dao.MarcaSubMarcaDAO;
import ar.com.cicweb.dao.ProductoDAO;
import ar.com.cicweb.dao.SubCategoriaDAO;
import ar.com.cicweb.dao.SubMarcaDAO;
import ar.com.cicweb.dominio.Categoria;
import ar.com.cicweb.dominio.Marca;
import ar.com.cicweb.dominio.Producto;
import ar.com.cicweb.dominio.SubCategoria;
import ar.com.cicweb.dominio.SubMarca;
import ar.com.cicweb.dozer.DozerMapper;
import ar.com.cicweb.dto.Categorizacion;
import ar.com.cicweb.dto.ProductoDTO;

//import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class Inicio {

	@Resource(name = "dozerMapper")
	DozerMapper dozerMapper;
	
	@Resource(name = "marcaDAO")
	MarcaDAO marcaDAO;

	@Resource(name = "categoriaDAO")
	CategoriaDAO categoriaDAO;

	@Resource(name = "subcategoriaDAO")
	SubCategoriaDAO subcategoriaDAO;

	@Resource(name = "submarcaDAO")
	SubMarcaDAO submarcaDAO;

	@Resource(name = "productoDAO")
	ProductoDAO productoDAO;

	@Resource(name = "categoriasubcategoriaDAO")
	CategoriaSubCategoriaDAO categoriasubcategoriaDAO;

	@Resource(name = "marcasubmarcaDAO")
	MarcaSubMarcaDAO marcasubmarcaDAO;

	@Resource(name = "categorizacion")
	Categorizacion categorizacion;

	@RequestMapping(value = "/martin.htm")
	public ModelAndView getInicio(HttpServletRequest req, HttpSession session) {

		ModelAndView mav = new ModelAndView("/WEB-INF/formularioCargaCompleta");

		categorizacion.setCategoria(categoriaDAO.obtenListaCategorias());

		categorizacion.setMarca(marcaDAO.obtenListaMarcas());

		mav.addObject("marcas", categorizacion);

		mav.addObject("productodto", new ProductoDTO());

		return mav;
	}

	@RequestMapping(value = "hibernate.htm4")
	public void hibernate() {
		Marca m = new Marca();
		m.setNombreMarca("marca 1");

		SubMarca sub = new SubMarca();
		sub.setNombreSubMarca("sub marca 1");

		Categoria c = new Categoria();
		c.setNombreCategoria("categoria1");

		SubCategoria s = new SubCategoria();
		s.setNombreSubCategoria("subca 1");

		Integer idMarca = marcaDAO.guardaMarca(m);
		sub.setSubMarca_idMarca(idMarca);
		Integer idSubMarca = submarcaDAO.guardaSubMarca(sub);

		marcasubmarcaDAO.guardaMarcaSubMarca(idMarca, idSubMarca);

		Integer idCategoria = categoriaDAO.guardaCategoria(c);
		s.setIdCategoria(idCategoria);
		Integer idSubCategoria = subcategoriaDAO.guardaSubCategoria(s);

		categoriasubcategoriaDAO.guardaCategoriaSubCategoria(idCategoria,
				idSubCategoria);

	}

	@RequestMapping(value = "/doCargarProducto.htm", method = RequestMethod.POST)
	public ModelAndView doCargarNuevoProducto(
			@ModelAttribute("productodto") ProductoDTO productoDTO,
			HttpServletRequest req, HttpSession session) {

		Producto producto = dozerMapper.map(productoDTO, Producto.class);
		
		productoDAO.guardaProducto(producto);

		return null;
	}

	@RequestMapping(value = "/doCargarSubMarca.htm", method = RequestMethod.POST)
	public @ResponseBody
	List<SubMarca> cargarSubMarca(@RequestParam int coMarca) {

		List<SubMarca> ListaSubMarcas = submarcaDAO
				.obtenListaSubMarcas(coMarca);

		return ListaSubMarcas;

	}

	@RequestMapping(value = "/doCargarSubCategoria.htm", method = RequestMethod.POST)
	public @ResponseBody List<SubCategoria> cargarSubCategoria(@RequestParam int coCategoria) {

		List<SubCategoria> ListaSubCategorias = subcategoriaDAO
				.obtenListaSubCategorias(coCategoria);

		return ListaSubCategorias;

	}

	@RequestMapping(value = "/subMarcas.htm", method = RequestMethod.POST)
	public @ResponseBody
	Collection<SubMarca> creaSubMarcas(@RequestParam String coMarca) {

		LinkedList<SubMarca> llsm = new LinkedList<SubMarca>();

		return llsm;
	}

	@RequestMapping(value = "/signin.htm")
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		return new ModelAndView("ajax_foo", "user", null);

	}
	
	
	@RequestMapping(value = "/doDevolverMarcas" )
	public @ResponseBody List<Marca> devolverMarcas(){
		
		return marcaDAO.obtenListaMarcas();
		
		
	}
	
	@RequestMapping(value = "/doDevolverCategorias" )
	public @ResponseBody List<Categoria> devolverCategorias(){
		
		return categoriaDAO.obtenListaCategorias();
		
		
	}

}
